package ec.edu.ups.cidi.siia.plamdep.comunicacionweb.extractorlinks;

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import ec.edu.ups.cidi.siia.plamdep.comunicacionweb.Utils.HtmlUtils;
public class LinksBing implements IExtractorLinks
{
    private ArrayList<String> resultados=new ArrayList<String>(); //el listado de links encontrados
    private HtmlUtils utils=new HtmlUtils();
    public void sacaLinksBing(String html)
    {
        html=html.replaceAll("\n"," ");
        ////////////////// bloque contenedor
        String inicont="(<div id=\"results\">)";
         String ei=".*";
        String expresion=inicont +ei+"</div>";
        Pattern p=Pattern.compile(expresion);
        Matcher m=p.matcher(html); 
        lis=new ArrayList<String> ();
        if(m.find())  obtenerLIS(html);
        /////////////////bloque  de links
        for(String li:lis)
        { 
            Pattern p2=Pattern.compile("(href=\")");
            Matcher m2=p2.matcher(li); 
            if(m2.find())
            {    
                int il=m2.end();
                li=li.substring(il, li.length()-1);
                Pattern p3=Pattern.compile("(\")");
                Matcher m3=p3.matcher(li); 
                if(m3.find())
                {   
                        String link=li.substring(0, m3.start());
                       if(link.trim().startsWith("/")==false)
                           resultados.add(link);
                }
            }
        }
    }
    ArrayList<String> lis=new ArrayList<String> ();
    /**
     * Obtiene las etiquetas html <li> para obtener los links
     * @param html 
     */
    public void obtenerLIS(String html)
    {
        Pattern p=Pattern.compile("(<li\\s)|(<li>)");
        Matcher m=p.matcher(html); 
        if(m.find())
        {
            Pattern p1=Pattern.compile("</li>");
            Matcher m1=p1.matcher(html); 
            if(m1.find())
            {
                    String li=html.substring(m.start(), m1.end());
                    lis.add(li);
                    html=html.substring(m1.end(), html.length()-1);
                    this.obtenerLIS(html);
            }
        }
    }
    
    public ArrayList<String> getLinks() {
    return this.resultados;
    }
    
    public void setContenidoHTML(String html) {
        this.sacaLinksBing(html);
    }
}